home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / x11 / networke / xfirepow.000 / xfirepow / xfirepower-0.84 / client / option.c < prev    next >
C/C++ Source or Header  |  1995-06-03  |  4KB  |  167 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4. #include "Wlib.h"
  5. #include "data.h"
  6. #include "defs.h"
  7.  
  8. #define OPT_HEADER 0
  9. #define OPT_BOOL 1
  10. #define OPT_INT 2
  11. #define OPT_STRING 3
  12. #define OPT_ACTION 4
  13.  
  14. struct opt_entry {
  15.     char *text;
  16.     int type;
  17.     void *var;
  18.     W_Color *color;
  19. };
  20.  
  21. int notdone, saveSettings=1;
  22.  
  23. char newkeymap[40];
  24.  
  25. struct opt_entry opts[] = {
  26.     {"Options", OPT_HEADER, 0, &W_Yellow},
  27.     {"show names on tanks", OPT_BOOL, &namesOnTanks, &W_White},
  28.     {"use split message windows", OPT_BOOL, &splitWindows, &W_White},
  29.     {"show build marker", OPT_BOOL, &showBuildMarker, &W_White},
  30.     {"Add to keymap", OPT_STRING, newkeymap, &W_White},
  31.     {"Save settings", OPT_ACTION, &saveSettings, &W_Red},
  32.     {"Done", OPT_ACTION, ¬done, &W_Yellow},
  33. };
  34.  
  35. #define NUM_OPTS (sizeof(opts)/sizeof(struct opt_entry))
  36.  
  37. void redraw_option_line(int i)
  38. {
  39.     char buf[60];
  40.     
  41.     switch(opts[i].type) {
  42.       case OPT_BOOL:
  43.     if(*((int *)opts[i].var)) {
  44.         strcpy(buf, opts[i].text);
  45.         buf[0] = toupper(buf[0]);
  46.     } else {
  47.         sprintf(buf, "Don't %s", opts[i].text);
  48.     }
  49.     W_WriteText(optionwin, 0, i, *opts[i].color, buf, strlen(buf), W_RegularFont);
  50.     break;
  51.       case OPT_STRING:
  52.     sprintf(buf, "%s:%s_", opts[i].text, ((char *)opts[i].var));
  53.     W_WriteText(optionwin, 0, i, *opts[i].color, buf, strlen(buf), W_RegularFont);
  54.     break;
  55.       case OPT_HEADER:
  56.       case OPT_ACTION:
  57.       default:
  58.     W_WriteText(optionwin, 0, i, *opts[i].color, opts[i].text, strlen(opts[i].text), W_RegularFont);
  59.     break;
  60.     }
  61. }
  62.  
  63. void redraw_option_win()
  64. {
  65.     int i;
  66.  
  67.     for(i=0;i<NUM_OPTS;i++) {
  68.     redraw_option_line(i);
  69.     }
  70. }
  71.  
  72. void map_option_win()
  73. {
  74.     if(W_IsMapped(optionwin)) {
  75.     W_DestroyWindow(optionwin);
  76.     optionwin = 0;
  77.     } else {
  78.     notdone = 1;
  79.     newkeymap[0] = 0;
  80.     optionwin = W_MakeMenu("option", WINWIDTH, 0, 40, NUM_OPTS, baseWin, 1);
  81.     W_Buffer(optionwin, 0);
  82.     redraw_option_win();
  83.     W_MapWindow(optionwin);
  84.     }
  85. }
  86.  
  87. void check_variable(void *var)
  88. {
  89.     if(var == (void *)&splitWindows) {
  90.     if(splitWindows) {
  91.         W_UnmapWindow(messwin[MW_JOINED]);
  92.         W_UnmapWindow(typewin);
  93.         W_MapWindow(messwin[MW_ALL]);
  94.         W_MapWindow(messwin[MW_TEAM]);
  95.         W_MapWindow(messwin[MW_INDIV]);
  96.         W_MapWindow(typewin);
  97.     } else {
  98.         W_UnmapWindow(typewin);
  99.         W_MapWindow(messwin[MW_JOINED]);
  100.         W_MapWindow(typewin);
  101.         W_UnmapWindow(messwin[MW_INDIV]);
  102.         W_UnmapWindow(messwin[MW_ALL]);
  103.         W_UnmapWindow(messwin[MW_TEAM]);
  104.     }
  105.     } if(var == (void *)&saveSettings) {
  106.     char *expname;
  107.     if(strlen(newkeymap) > 1) {
  108.         add_keymap(newkeymap);
  109.         newkeymap[0] = 0;
  110.         redraw_option_win();
  111.     }
  112.     saveSettings = 1;
  113.     expname = expand_filename("~/.firepowerrc");
  114.     write_defaults(expname);
  115.     } if(var == (void *)newkeymap) {
  116.     add_keymap(newkeymap);
  117.     newkeymap[0] = 0;
  118.     }
  119. }
  120.  
  121. void option_event(W_Event *ev)
  122. {
  123.     if(ev->type == W_EV_BUTTON) {
  124.     if((opts[ev->y].type == OPT_BOOL || opts[ev->y].type == OPT_ACTION) && opts[ev->y].var) {
  125.         *((int *)opts[ev->y].var) = !(*((int *)opts[ev->y].var));
  126.         check_variable(opts[ev->y].var);
  127.         redraw_option_line(ev->y);
  128.         if(!notdone) {
  129.         if(strlen(newkeymap) > 1) {
  130.             add_keymap(newkeymap);
  131.             newkeymap[0] = 0;
  132.         }
  133.         if(W_IsMapped(optionwin)) {
  134.             W_DestroyWindow(optionwin);
  135.             optionwin = 0;
  136.         }
  137.         }
  138.     }
  139.     } else if(ev->type == W_EV_KEY) {
  140.     if(opts[ev->y].type == OPT_STRING) {
  141.         char *var = ((char *)opts[ev->y].var);
  142.         switch(ev->key) {
  143.           case 10:
  144.           case 13:
  145.         check_variable(opts[ev->y].var);
  146.         redraw_option_line(ev->y);
  147.         break;
  148.           case 8:
  149.           case 127:
  150.         if(strlen(var) > 0) {
  151.             var[strlen(var)-1] = 0;
  152.             redraw_option_line(ev->y);
  153.         }
  154.         break;
  155.           default:
  156.         if(strlen(var) < 30) {
  157.             var[strlen(var)+1] = 0;
  158.             var[strlen(var)] = ev->key;
  159.             redraw_option_line(ev->y);
  160.         }
  161.         break;
  162.         }
  163.     }
  164.     }
  165. }
  166.  
  167.